package cn.wizzer.app.crown.modules.models.caches;

import cn.wizzer.app.crown.modules.models.enums.MatchTypeEnum;
import cn.wizzer.app.crown.modules.models.enums.PlayWayEnum;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Objects;

/**
 * 单式 及综合 数据结构，无需存储
 */
@Data
public class CrownMatchSimplex implements Serializable {

    /**
     * 比赛ID
     */
    private String crownMatchId;

    /**
     * 编号 列号
     * 足球：
     * 1：全场独赢
     * 2：全场让球
     * 3：全场大小
     * 4：全场单双
     * 5：半场独赢
     * 6：半场让球
     * 7：半场大小
     * 8：半场波胆
     * 9：全场波胆
     * 10：半场总入球
     * 11：全场总入球
     * 12：半场/全场
     * <p>
     * 13：(15分钟盘口)开场 - 14:59 分钟 - 让球
     * 14：(15分钟盘口)开场 - 14:59 分钟 - 大 / 小
     * 15：(15分钟盘口)开场 - 14:59 分钟 - 独赢
     * 16：(15分钟盘口)15:00 - 29:59 分钟 - 让球
     * 17：(15分钟盘口)15:00 - 29:59 分钟 - 大 / 小
     * 18：(15分钟盘口)15:00 - 29:59 分钟 - 独赢
     * 19：(15分钟盘口)30:00 分钟 - 半场 - 让球
     * 20：(15分钟盘口)30:00 分钟 - 半场 - 大 / 小
     * 21：(15分钟盘口)30:00 分钟 - 半场 - 独赢
     * 22：(15分钟盘口)下半场开始 - 59:59 分钟 - 让球
     * 23：(15分钟盘口)下半场开始 - 59:59 分钟 - 大 / 小
     * 24：(15分钟盘口)下半场开始 - 59:59 分钟 - 独赢
     * 25：(15分钟盘口)60:00 - 74:59 分钟 - 让球
     * 26：(15分钟盘口)60:00 - 74:59 分钟 - 大 / 小
     * 27：(15分钟盘口)60:00 - 74:59 分钟 - 独赢
     * 28：(15分钟盘口)75:00 分钟 - 全场 - 让球
     * 29：(15分钟盘口)75:00 分钟 - 全场 - 大 / 小
     * 30：(15分钟盘口)75:00 分钟 - 全场 - 独赢
     * <p>
     * 31：全场双方球队进球
     * 32：上半场双方球队进球(今日、早盘中存在。滚球不存在)
     * 33：下半场双方球队进球(滚球中存在。今日、早盘不存在)
     * <p>
     * 34：全场球队进球数大
     * 35：全场球队进球数小
     * 36：半场球队进球数大
     * 37：半场球队进球数小
     * <p>
     * 38：半场单双
     * 39：净胜球数
     * <p>
     * 40：双重机会
     * 41：零失球
     * 42：零失球获胜
     * <p>
     * 43：独赢 & 进球 大 / 小
     * 44：独赢 & 双方球队进球
     * <p>
     * 45：最多进球的半场
     * 46：最多进球的半场 - 独赢
     * 47：双半场进球
     * <p>
     * 48：双重机会 & 进球 大 / 小
     * 49：双重机会 & 双方球队进球
     * <p>
     * 50：进球 大 / 小 & 进球 单 / 双
     * <p>
     * 51：赢得任一半场
     * 52：赢得所有半场
     *
     * <p>
     * 篮球
     * 1：全场独赢
     * 2：全场让球
     * 3：全场大小
     * 4：球队得分大
     * 5：球队得分小
     */
    private int no1;

    /**
     * 编号2 情况2（值不同系数构成玩法
     */
    private int no2;

    /**
     * 编号3 123表示胜平负
     */
    private int no3;

    /**
     * 系数文字
     */
    private String coeWord;

    /**
     * 系数数值
     */
    private String coeNum;

    /**
     * 赔率
     */
    private BigDecimal odds;

    /**
     * 赛事分类
     */
    private MatchTypeEnum matchType;
    /**
     * 玩法
     */
    private PlayWayEnum playWay;

    /**
     * 联赛名称
     */
    private String league;

    /**
     * match表中的主队
     * PlayWayUtil 转换用
     */
    private String mbTeam;

    /**
     * match表中的客队
     * PlayWayUtil 转换用
     */
    private String tgTeam;


    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        CrownMatchSimplex that = (CrownMatchSimplex) o;
        return no1 == that.no1 &&
                no2 == that.no2 &&
                no3 == that.no3 &&
                playWay == that.playWay &&
                matchType == that.matchType &&
                Objects.equals(crownMatchId, that.crownMatchId) &&
                Objects.equals(coeWord, that.coeWord) &&
                Objects.equals(coeNum, that.coeNum) &&
                (odds.setScale(2, RoundingMode.DOWN).compareTo(that.odds.setScale(2, RoundingMode.DOWN)) == 0);
    }

    @Override
    public int hashCode() {
        return Objects.hash(crownMatchId, no1, no2, no3,playWay, coeWord, coeNum, odds);
    }
}